package eventReservationServer.loginGateway;

import java.net.MalformedURLException;
import java.rmi.NotBoundException;
import java.rmi.RMISecurityManager;
import java.rmi.RemoteException;

import authorizationRMI.IAuthorizationRMI;
import authorizationRMI.InvalidPasswordException;
import authorizationRMI.InvalidUserException;
import authorizationRMI.User;

public class AuthRMIGateway implements IAuthorizeGateway
{
	/**
	 * Add your code to invoke the Authorization RMI Server here Remember you
	 * must use the interface and exceptions contained in
	 * AuthorizationRMIClient.jar THIS SECTION BELONGS TO THE FIRST ASSIGNMENT
	 */
	public AuthRMIGateway() // Quito el parámetro "String serviceUri"
	{

	}

	public UserDO login(String uname, String pass) throws ValidationException
	{
		User u = null;
		// Crear e instalar el SecurityManager
		if (System.getSecurityManager() == null)
		{
			System.setSecurityManager(new RMISecurityManager());
		}

		// Obtener una referencia al objeto remoto del servidor
		String name = "//" + util.Settings.AUTHORIZATION_SERVICE_RMI_IP + ":"
				+ util.Settings.AUTHORIZATION_SERVICE_RMI_PORT
				+ "/AuthorizationService";

		try
		{
			IAuthorizationRMI objServidor = (authorizationRMI.IAuthorizationRMI) java.rmi.Naming
					.lookup(name);
			try
			{
				u = objServidor.login(uname, pass);
			}
			catch (RemoteException e)
			{
				System.out.println("Error de validación: excepción remota."); // registro
				throw new ValidationException(
						"Error de validación: excepción remota.");
			}
			catch (InvalidUserException e)
			{
				System.out.println("Error de validación: usuario incorrecto."); // registro
				throw new ValidationException(
						"Error de validación: usuario incorrecto.");
			}
			catch (InvalidPasswordException e)
			{
				System.out.println("Error de validación: contraseña incorrecta."); // registro
				throw new ValidationException(
						"Error de validación: contraseña incorrecta.");
			}
		}
		catch (MalformedURLException e)
		{
			System.out.println("Error de validación: excepción remota."); // registro
			throw new ValidationException(
					"Error de validación: excepción remota.");
		}
		catch (NotBoundException e)
		{
			System.out.println("Error de validación: excepción remota."); // registro
			throw new ValidationException(
					"Error de validación: excepción remota.");
		}
		catch (RemoteException e)
		{
			e.printStackTrace();
		}
		return new UserDO(u.getUsername(), u.getPassword(), u.getName(), u.getAge(), u.getSex());
	}
}
